<?php
/**
 * 自动加载类文件 php7.0以上，建议7.2以上
 * cighsen02
 * Time: 2021.08.01
 **/
 
// 指定要加载class目录
define('CLASS_DIR', [
	'twoir' => EXTEND_DIR . DIRECTORY_SEPARATOR . 'twoir' . DIRECTORY_SEPARATOR . 'class',
]);

/**
 * 自加载类文件
 **/
class Loader {
	public static function autoload($class) {

		//不同操作系统 '/' 不一致问题
		if(false !== stristr(PHP_OS, 'LINUX')) $class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
		
		//加载异常类
		if('ErrorHandler' === $class) {
			
			include EXTEND_DIR . DIRECTORY_SEPARATOR . 'ErrorHandler.php';
		 
		//加载常规类
		} else {
			
			if(false === $pluginname = strstr($class, DIRECTORY_SEPARATOR, true)) {
				
				throw new Exception('请用命名空间实现自动加载', 9401);
			}
			
			$pluginname = strtolower($pluginname);

			if(isset(CLASS_DIR[$pluginname])) {
				
				include CLASS_DIR[$pluginname] . strstr($class, DIRECTORY_SEPARATOR) . '.php';
			}
		}
	}
}

/** 
 * 加载配件文件 @param return []
 * Config::插件名称(变量名) 
 */
class Config
{
	private $path;
	
	private function include($parameter)
	{
		//文件是否存在
		if(!file_exists($file = $this->path . DIRECTORY_SEPARATOR . $parameter . '.php')){
			
			throw new Exception('配制' . $parameter . '.php不存在', 9401);
		}
		
		return (require $file) ?? [];
	}
	
	private function getConfig($name, $parameters)
	{
		$data = []; $key = $parameters;
		
		//转数组
		if(is_string($parameters)) $parameters = (array)$parameters;
		
		if(is_array($parameters)) {
			
			foreach($parameters as $parameter) $data[$parameter] = $this->include($parameter);
		}
		
		return count($data) > 1 ? $data : $data[$key];
	}
	
	public static function __callStatic($name, $parameters)
	{
		//判断插件是否存在
		if(!isset(CLASS_DIR[$name])) throw new Exception('插件' . $name . '不存在', 9401);
		
		$new = new static();
		$new->path = dirname(CLASS_DIR[$name]);
		
		return $new->getConfig($name, ...$parameters);
	}
}

spl_autoload_register(['Loader', 'autoload']);

//启动自定义错误抛出
new ErrorHandler();